{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:25:32.514174300Z",
     "start_time": "2023-05-09T09:25:32.505172800Z"
    }
   },
   "outputs": [],
   "source": [
    "import sys\n",
    "\n",
    "sys.path.append('..')\n",
    "from common.time_layers import *\n",
    "import pickle\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [],
   "source": [
    "class Rnnlm:\n",
    "    def __init__(self, vocab_size=10000, wordvec_size=100,\n",
    "                 hidden_size=100):\n",
    "        V, D, H = vocab_size, wordvec_size, hidden_size\n",
    "        rn = np.random.randn\n",
    "\n",
    "        # 初始化权重\n",
    "        embed_W = (rn(V, D) / 100).astype('f')\n",
    "        lstm_Wx = (rn(D, 4 * H) / np.sqrt(D)).astype('f')\n",
    "        lstm_Wh = (rn(H, 4 * H) / np.sqrt(H)).astype('f')\n",
    "        lstm_b = np.zeros(4 * H).astype('f')\n",
    "        affine_W = (rn(H, V) / np.sqrt(H)).astype('f')\n",
    "        affine_b = np.zeros(V).astype('f')\n",
    "\n",
    "        # 生成层\n",
    "        self.layers = [\n",
    "            TimeEmbedding(embed_W),\n",
    "            TimeLSTM(lstm_Wx, lstm_Wh, lstm_b, stateful=True),\n",
    "            TimeAffine(affine_W, affine_b)\n",
    "        ]\n",
    "        self.loss_layer = TimeSoftmaxWithLoss()\n",
    "        self.lstm_layer = self.layers[1]\n",
    "\n",
    "        # 将所有的权重和梯度整理到列表中\n",
    "        self.params, self.grads = [], []\n",
    "        for layer in self.layers:\n",
    "            self.params += layer.params\n",
    "            self.grads += layer.grads\n",
    "\n",
    "    def predict(self, xs):\n",
    "        for layer in self.layers:\n",
    "            xs = layer.forward(xs)\n",
    "        return xs\n",
    "\n",
    "    def forward(self, xs, ts):\n",
    "        score = self.predict(xs)\n",
    "        loss = self.loss_layer.forward(score, ts)\n",
    "        return loss\n",
    "\n",
    "    def backward(self, dout=1):\n",
    "        dout = self.loss_layer.backward(dout)\n",
    "        for layer in reversed(self.layers):\n",
    "            dout = layer.backward(dout)\n",
    "        return dout\n",
    "\n",
    "    def reset_state(self):\n",
    "        self.lstm_layer.reset_state()\n",
    "\n",
    "    def save_params(self, file_name='Rnnlm.pkl'):\n",
    "        with open(file_name, 'wb') as f:\n",
    "            pickle.dump(self.params, f)\n",
    "\n",
    "    def load_params(self, file_name='Rnnlm.pkl'):\n",
    "        with open(file_name, 'rb') as f:\n",
    "            self.params = pickle.load(f)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:40:03.581946600Z",
     "start_time": "2023-05-09T09:40:03.572952Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [],
   "source": [
    "from common.optimizer import SGD\n",
    "from common.trainer import RnnlmTrainer\n",
    "from common.util import eval_perplexity\n",
    "from dataset import ptb"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:32:21.896196400Z",
     "start_time": "2023-05-09T09:32:21.315197200Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "# 设定超参数\n",
    "batch_size = 20\n",
    "wordvec_size = 100\n",
    "hidden_size = 100  # RNN的隐藏状态向量的元素个数\n",
    "time_size = 35  # RNN的展开大小\n",
    "lr = 20.0\n",
    "max_epoch = 4\n",
    "max_grad = 0.25"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:36:49.353281900Z",
     "start_time": "2023-05-09T09:36:49.325243200Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [],
   "source": [
    "# 读入训练数据\n",
    "corpus, word_to_id, id_to_word = ptb.load_data('train')\n",
    "corpus_test, _, _ = ptb.load_data('test')\n",
    "vocab_size = len(word_to_id)\n",
    "xs = corpus[:-1]\n",
    "ts = corpus[1:]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:38:25.370374100Z",
     "start_time": "2023-05-09T09:38:25.329376900Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [],
   "source": [
    "# 生成模型\n",
    "model = Rnnlm(vocab_size, wordvec_size, hidden_size)\n",
    "optimizer = SGD(lr)\n",
    "trainer = RnnlmTrainer(model, optimizer)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:40:15.632757300Z",
     "start_time": "2023-05-09T09:40:15.571759400Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| epoch 1 |  iter 1 / 1327 | time 0[s] | perplexity 9998.01\n",
      "| epoch 1 |  iter 21 / 1327 | time 3[s] | perplexity 2798.35\n",
      "| epoch 1 |  iter 41 / 1327 | time 7[s] | perplexity 1258.05\n",
      "| epoch 1 |  iter 61 / 1327 | time 10[s] | perplexity 969.35\n",
      "| epoch 1 |  iter 81 / 1327 | time 13[s] | perplexity 801.00\n",
      "| epoch 1 |  iter 101 / 1327 | time 17[s] | perplexity 645.01\n",
      "| epoch 1 |  iter 121 / 1327 | time 20[s] | perplexity 637.70\n",
      "| epoch 1 |  iter 141 / 1327 | time 24[s] | perplexity 597.97\n",
      "| epoch 1 |  iter 161 / 1327 | time 27[s] | perplexity 585.71\n",
      "| epoch 1 |  iter 181 / 1327 | time 30[s] | perplexity 586.13\n",
      "| epoch 1 |  iter 201 / 1327 | time 33[s] | perplexity 510.08\n",
      "| epoch 1 |  iter 221 / 1327 | time 37[s] | perplexity 486.10\n",
      "| epoch 1 |  iter 241 / 1327 | time 40[s] | perplexity 434.68\n",
      "| epoch 1 |  iter 261 / 1327 | time 43[s] | perplexity 461.83\n",
      "| epoch 1 |  iter 281 / 1327 | time 46[s] | perplexity 441.30\n",
      "| epoch 1 |  iter 301 / 1327 | time 50[s] | perplexity 380.13\n",
      "| epoch 1 |  iter 321 / 1327 | time 53[s] | perplexity 337.89\n",
      "| epoch 1 |  iter 341 / 1327 | time 56[s] | perplexity 397.29\n",
      "| epoch 1 |  iter 361 / 1327 | time 59[s] | perplexity 401.92\n",
      "| epoch 1 |  iter 381 / 1327 | time 63[s] | perplexity 328.84\n",
      "| epoch 1 |  iter 401 / 1327 | time 66[s] | perplexity 342.28\n",
      "| epoch 1 |  iter 421 / 1327 | time 69[s] | perplexity 335.70\n",
      "| epoch 1 |  iter 441 / 1327 | time 73[s] | perplexity 326.77\n",
      "| epoch 1 |  iter 461 / 1327 | time 76[s] | perplexity 321.42\n",
      "| epoch 1 |  iter 481 / 1327 | time 79[s] | perplexity 297.50\n",
      "| epoch 1 |  iter 501 / 1327 | time 82[s] | perplexity 304.26\n",
      "| epoch 1 |  iter 521 / 1327 | time 86[s] | perplexity 294.57\n",
      "| epoch 1 |  iter 541 / 1327 | time 89[s] | perplexity 316.59\n",
      "| epoch 1 |  iter 561 / 1327 | time 92[s] | perplexity 281.74\n",
      "| epoch 1 |  iter 581 / 1327 | time 95[s] | perplexity 252.17\n",
      "| epoch 1 |  iter 601 / 1327 | time 99[s] | perplexity 332.81\n",
      "| epoch 1 |  iter 621 / 1327 | time 102[s] | perplexity 308.57\n",
      "| epoch 1 |  iter 641 / 1327 | time 105[s] | perplexity 275.10\n",
      "| epoch 1 |  iter 661 / 1327 | time 108[s] | perplexity 263.40\n",
      "| epoch 1 |  iter 681 / 1327 | time 111[s] | perplexity 226.47\n",
      "| epoch 1 |  iter 701 / 1327 | time 115[s] | perplexity 247.27\n",
      "| epoch 1 |  iter 721 / 1327 | time 118[s] | perplexity 256.39\n",
      "| epoch 1 |  iter 741 / 1327 | time 121[s] | perplexity 217.06\n",
      "| epoch 1 |  iter 761 / 1327 | time 125[s] | perplexity 230.91\n",
      "| epoch 1 |  iter 781 / 1327 | time 128[s] | perplexity 216.94\n",
      "| epoch 1 |  iter 801 / 1327 | time 131[s] | perplexity 238.29\n",
      "| epoch 1 |  iter 821 / 1327 | time 134[s] | perplexity 224.65\n",
      "| epoch 1 |  iter 841 / 1327 | time 138[s] | perplexity 226.10\n",
      "| epoch 1 |  iter 861 / 1327 | time 141[s] | perplexity 219.10\n",
      "| epoch 1 |  iter 881 / 1327 | time 144[s] | perplexity 203.79\n",
      "| epoch 1 |  iter 901 / 1327 | time 148[s] | perplexity 252.64\n",
      "| epoch 1 |  iter 921 / 1327 | time 151[s] | perplexity 223.60\n",
      "| epoch 1 |  iter 941 / 1327 | time 154[s] | perplexity 230.52\n",
      "| epoch 1 |  iter 961 / 1327 | time 158[s] | perplexity 243.43\n",
      "| epoch 1 |  iter 981 / 1327 | time 161[s] | perplexity 228.54\n",
      "| epoch 1 |  iter 1001 / 1327 | time 165[s] | perplexity 193.38\n",
      "| epoch 1 |  iter 1021 / 1327 | time 168[s] | perplexity 222.67\n",
      "| epoch 1 |  iter 1041 / 1327 | time 171[s] | perplexity 207.37\n",
      "| epoch 1 |  iter 1061 / 1327 | time 175[s] | perplexity 195.47\n",
      "| epoch 1 |  iter 1081 / 1327 | time 178[s] | perplexity 168.66\n",
      "| epoch 1 |  iter 1101 / 1327 | time 181[s] | perplexity 189.75\n",
      "| epoch 1 |  iter 1121 / 1327 | time 184[s] | perplexity 226.49\n",
      "| epoch 1 |  iter 1141 / 1327 | time 188[s] | perplexity 207.64\n",
      "| epoch 1 |  iter 1161 / 1327 | time 191[s] | perplexity 197.77\n",
      "| epoch 1 |  iter 1181 / 1327 | time 194[s] | perplexity 189.42\n",
      "| epoch 1 |  iter 1201 / 1327 | time 197[s] | perplexity 162.05\n",
      "| epoch 1 |  iter 1221 / 1327 | time 201[s] | perplexity 158.23\n",
      "| epoch 1 |  iter 1241 / 1327 | time 204[s] | perplexity 186.25\n",
      "| epoch 1 |  iter 1261 / 1327 | time 207[s] | perplexity 170.35\n",
      "| epoch 1 |  iter 1281 / 1327 | time 210[s] | perplexity 177.96\n",
      "| epoch 1 |  iter 1301 / 1327 | time 214[s] | perplexity 220.74\n",
      "| epoch 1 |  iter 1321 / 1327 | time 217[s] | perplexity 209.61\n",
      "| epoch 2 |  iter 1 / 1327 | time 218[s] | perplexity 225.18\n",
      "| epoch 2 |  iter 21 / 1327 | time 221[s] | perplexity 203.76\n",
      "| epoch 2 |  iter 41 / 1327 | time 225[s] | perplexity 188.05\n",
      "| epoch 2 |  iter 61 / 1327 | time 228[s] | perplexity 175.10\n",
      "| epoch 2 |  iter 81 / 1327 | time 231[s] | perplexity 159.68\n",
      "| epoch 2 |  iter 101 / 1327 | time 234[s] | perplexity 152.61\n",
      "| epoch 2 |  iter 121 / 1327 | time 238[s] | perplexity 157.79\n",
      "| epoch 2 |  iter 141 / 1327 | time 241[s] | perplexity 176.63\n",
      "| epoch 2 |  iter 161 / 1327 | time 244[s] | perplexity 190.96\n",
      "| epoch 2 |  iter 181 / 1327 | time 248[s] | perplexity 198.75\n",
      "| epoch 2 |  iter 201 / 1327 | time 251[s] | perplexity 183.54\n",
      "| epoch 2 |  iter 221 / 1327 | time 254[s] | perplexity 182.24\n",
      "| epoch 2 |  iter 241 / 1327 | time 257[s] | perplexity 174.92\n",
      "| epoch 2 |  iter 261 / 1327 | time 261[s] | perplexity 183.53\n",
      "| epoch 2 |  iter 281 / 1327 | time 264[s] | perplexity 186.28\n",
      "| epoch 2 |  iter 301 / 1327 | time 267[s] | perplexity 167.37\n",
      "| epoch 2 |  iter 321 / 1327 | time 271[s] | perplexity 138.02\n",
      "| epoch 2 |  iter 341 / 1327 | time 274[s] | perplexity 171.34\n",
      "| epoch 2 |  iter 361 / 1327 | time 277[s] | perplexity 195.13\n",
      "| epoch 2 |  iter 381 / 1327 | time 281[s] | perplexity 153.07\n",
      "| epoch 2 |  iter 401 / 1327 | time 284[s] | perplexity 167.35\n",
      "| epoch 2 |  iter 421 / 1327 | time 287[s] | perplexity 153.98\n",
      "| epoch 2 |  iter 441 / 1327 | time 290[s] | perplexity 161.92\n",
      "| epoch 2 |  iter 461 / 1327 | time 294[s] | perplexity 157.80\n",
      "| epoch 2 |  iter 481 / 1327 | time 297[s] | perplexity 155.90\n",
      "| epoch 2 |  iter 501 / 1327 | time 300[s] | perplexity 169.16\n",
      "| epoch 2 |  iter 521 / 1327 | time 303[s] | perplexity 171.27\n",
      "| epoch 2 |  iter 541 / 1327 | time 307[s] | perplexity 174.51\n",
      "| epoch 2 |  iter 561 / 1327 | time 310[s] | perplexity 153.90\n",
      "| epoch 2 |  iter 581 / 1327 | time 313[s] | perplexity 137.49\n",
      "| epoch 2 |  iter 601 / 1327 | time 317[s] | perplexity 189.91\n",
      "| epoch 2 |  iter 621 / 1327 | time 320[s] | perplexity 181.14\n",
      "| epoch 2 |  iter 641 / 1327 | time 323[s] | perplexity 163.71\n",
      "| epoch 2 |  iter 661 / 1327 | time 326[s] | perplexity 154.43\n",
      "| epoch 2 |  iter 681 / 1327 | time 330[s] | perplexity 130.00\n",
      "| epoch 2 |  iter 701 / 1327 | time 333[s] | perplexity 149.92\n",
      "| epoch 2 |  iter 721 / 1327 | time 336[s] | perplexity 160.00\n",
      "| epoch 2 |  iter 741 / 1327 | time 339[s] | perplexity 133.26\n",
      "| epoch 2 |  iter 761 / 1327 | time 343[s] | perplexity 131.38\n",
      "| epoch 2 |  iter 781 / 1327 | time 346[s] | perplexity 136.11\n",
      "| epoch 2 |  iter 801 / 1327 | time 349[s] | perplexity 148.10\n",
      "| epoch 2 |  iter 821 / 1327 | time 352[s] | perplexity 144.94\n",
      "| epoch 2 |  iter 841 / 1327 | time 356[s] | perplexity 145.27\n",
      "| epoch 2 |  iter 861 / 1327 | time 359[s] | perplexity 145.25\n",
      "| epoch 2 |  iter 881 / 1327 | time 362[s] | perplexity 130.54\n",
      "| epoch 2 |  iter 901 / 1327 | time 366[s] | perplexity 166.38\n",
      "| epoch 2 |  iter 921 / 1327 | time 369[s] | perplexity 146.14\n",
      "| epoch 2 |  iter 941 / 1327 | time 372[s] | perplexity 152.42\n",
      "| epoch 2 |  iter 961 / 1327 | time 375[s] | perplexity 163.61\n",
      "| epoch 2 |  iter 981 / 1327 | time 379[s] | perplexity 154.68\n",
      "| epoch 2 |  iter 1001 / 1327 | time 382[s] | perplexity 132.24\n",
      "| epoch 2 |  iter 1021 / 1327 | time 385[s] | perplexity 156.39\n",
      "| epoch 2 |  iter 1041 / 1327 | time 389[s] | perplexity 143.19\n",
      "| epoch 2 |  iter 1061 / 1327 | time 392[s] | perplexity 128.79\n",
      "| epoch 2 |  iter 1081 / 1327 | time 395[s] | perplexity 110.18\n",
      "| epoch 2 |  iter 1101 / 1327 | time 398[s] | perplexity 119.84\n",
      "| epoch 2 |  iter 1121 / 1327 | time 402[s] | perplexity 154.66\n",
      "| epoch 2 |  iter 1141 / 1327 | time 405[s] | perplexity 141.42\n",
      "| epoch 2 |  iter 1161 / 1327 | time 408[s] | perplexity 133.08\n",
      "| epoch 2 |  iter 1181 / 1327 | time 412[s] | perplexity 135.12\n",
      "| epoch 2 |  iter 1201 / 1327 | time 415[s] | perplexity 112.77\n",
      "| epoch 2 |  iter 1221 / 1327 | time 418[s] | perplexity 109.60\n",
      "| epoch 2 |  iter 1241 / 1327 | time 421[s] | perplexity 128.60\n",
      "| epoch 2 |  iter 1261 / 1327 | time 425[s] | perplexity 124.53\n",
      "| epoch 2 |  iter 1281 / 1327 | time 428[s] | perplexity 122.09\n",
      "| epoch 2 |  iter 1301 / 1327 | time 432[s] | perplexity 155.89\n",
      "| epoch 2 |  iter 1321 / 1327 | time 435[s] | perplexity 152.96\n",
      "| epoch 3 |  iter 1 / 1327 | time 436[s] | perplexity 160.03\n",
      "| epoch 3 |  iter 21 / 1327 | time 439[s] | perplexity 144.56\n",
      "| epoch 3 |  iter 41 / 1327 | time 443[s] | perplexity 135.68\n",
      "| epoch 3 |  iter 61 / 1327 | time 446[s] | perplexity 127.92\n",
      "| epoch 3 |  iter 81 / 1327 | time 449[s] | perplexity 117.37\n",
      "| epoch 3 |  iter 101 / 1327 | time 453[s] | perplexity 106.32\n",
      "| epoch 3 |  iter 121 / 1327 | time 456[s] | perplexity 115.28\n",
      "| epoch 3 |  iter 141 / 1327 | time 459[s] | perplexity 127.58\n",
      "| epoch 3 |  iter 161 / 1327 | time 462[s] | perplexity 142.35\n",
      "| epoch 3 |  iter 181 / 1327 | time 466[s] | perplexity 150.74\n",
      "| epoch 3 |  iter 201 / 1327 | time 469[s] | perplexity 140.48\n",
      "| epoch 3 |  iter 221 / 1327 | time 472[s] | perplexity 140.02\n",
      "| epoch 3 |  iter 241 / 1327 | time 475[s] | perplexity 133.26\n",
      "| epoch 3 |  iter 261 / 1327 | time 479[s] | perplexity 139.02\n",
      "| epoch 3 |  iter 281 / 1327 | time 482[s] | perplexity 143.61\n",
      "| epoch 3 |  iter 301 / 1327 | time 485[s] | perplexity 124.47\n",
      "| epoch 3 |  iter 321 / 1327 | time 489[s] | perplexity 100.69\n",
      "| epoch 3 |  iter 341 / 1327 | time 492[s] | perplexity 123.44\n",
      "| epoch 3 |  iter 361 / 1327 | time 495[s] | perplexity 151.71\n",
      "| epoch 3 |  iter 381 / 1327 | time 498[s] | perplexity 114.66\n",
      "| epoch 3 |  iter 401 / 1327 | time 502[s] | perplexity 129.29\n",
      "| epoch 3 |  iter 421 / 1327 | time 505[s] | perplexity 113.34\n",
      "| epoch 3 |  iter 441 / 1327 | time 508[s] | perplexity 124.50\n",
      "| epoch 3 |  iter 461 / 1327 | time 511[s] | perplexity 118.69\n",
      "| epoch 3 |  iter 481 / 1327 | time 515[s] | perplexity 120.07\n",
      "| epoch 3 |  iter 501 / 1327 | time 518[s] | perplexity 128.74\n",
      "| epoch 3 |  iter 521 / 1327 | time 521[s] | perplexity 136.34\n",
      "| epoch 3 |  iter 541 / 1327 | time 524[s] | perplexity 135.44\n",
      "| epoch 3 |  iter 561 / 1327 | time 528[s] | perplexity 117.30\n",
      "| epoch 3 |  iter 581 / 1327 | time 531[s] | perplexity 105.41\n",
      "| epoch 3 |  iter 601 / 1327 | time 534[s] | perplexity 149.70\n",
      "| epoch 3 |  iter 621 / 1327 | time 538[s] | perplexity 142.71\n",
      "| epoch 3 |  iter 641 / 1327 | time 541[s] | perplexity 129.02\n",
      "| epoch 3 |  iter 661 / 1327 | time 544[s] | perplexity 119.78\n",
      "| epoch 3 |  iter 681 / 1327 | time 547[s] | perplexity 99.97\n",
      "| epoch 3 |  iter 701 / 1327 | time 551[s] | perplexity 118.56\n",
      "| epoch 3 |  iter 721 / 1327 | time 554[s] | perplexity 127.36\n",
      "| epoch 3 |  iter 741 / 1327 | time 557[s] | perplexity 108.22\n",
      "| epoch 3 |  iter 761 / 1327 | time 560[s] | perplexity 102.25\n",
      "| epoch 3 |  iter 781 / 1327 | time 564[s] | perplexity 104.25\n",
      "| epoch 3 |  iter 801 / 1327 | time 567[s] | perplexity 115.88\n",
      "| epoch 3 |  iter 821 / 1327 | time 570[s] | perplexity 117.61\n",
      "| epoch 3 |  iter 841 / 1327 | time 574[s] | perplexity 114.46\n",
      "| epoch 3 |  iter 861 / 1327 | time 577[s] | perplexity 121.35\n",
      "| epoch 3 |  iter 881 / 1327 | time 580[s] | perplexity 106.01\n",
      "| epoch 3 |  iter 901 / 1327 | time 584[s] | perplexity 131.29\n",
      "| epoch 3 |  iter 921 / 1327 | time 587[s] | perplexity 117.85\n",
      "| epoch 3 |  iter 941 / 1327 | time 590[s] | perplexity 126.85\n",
      "| epoch 3 |  iter 961 / 1327 | time 593[s] | perplexity 131.72\n",
      "| epoch 3 |  iter 981 / 1327 | time 597[s] | perplexity 123.98\n",
      "| epoch 3 |  iter 1001 / 1327 | time 600[s] | perplexity 110.23\n",
      "| epoch 3 |  iter 1021 / 1327 | time 603[s] | perplexity 128.41\n",
      "| epoch 3 |  iter 1041 / 1327 | time 606[s] | perplexity 120.14\n",
      "| epoch 3 |  iter 1061 / 1327 | time 610[s] | perplexity 102.59\n",
      "| epoch 3 |  iter 1081 / 1327 | time 613[s] | perplexity 88.64\n",
      "| epoch 3 |  iter 1101 / 1327 | time 616[s] | perplexity 93.72\n",
      "| epoch 3 |  iter 1121 / 1327 | time 619[s] | perplexity 122.96\n",
      "| epoch 3 |  iter 1141 / 1327 | time 623[s] | perplexity 114.16\n",
      "| epoch 3 |  iter 1161 / 1327 | time 626[s] | perplexity 105.91\n",
      "| epoch 3 |  iter 1181 / 1327 | time 629[s] | perplexity 111.54\n",
      "| epoch 3 |  iter 1201 / 1327 | time 633[s] | perplexity 94.39\n",
      "| epoch 3 |  iter 1221 / 1327 | time 636[s] | perplexity 88.72\n",
      "| epoch 3 |  iter 1241 / 1327 | time 639[s] | perplexity 104.37\n",
      "| epoch 3 |  iter 1261 / 1327 | time 642[s] | perplexity 106.20\n",
      "| epoch 3 |  iter 1281 / 1327 | time 646[s] | perplexity 100.03\n",
      "| epoch 3 |  iter 1301 / 1327 | time 649[s] | perplexity 128.09\n",
      "| epoch 3 |  iter 1321 / 1327 | time 652[s] | perplexity 125.84\n",
      "| epoch 4 |  iter 1 / 1327 | time 653[s] | perplexity 131.46\n",
      "| epoch 4 |  iter 21 / 1327 | time 657[s] | perplexity 121.88\n",
      "| epoch 4 |  iter 41 / 1327 | time 660[s] | perplexity 107.23\n",
      "| epoch 4 |  iter 61 / 1327 | time 663[s] | perplexity 108.00\n",
      "| epoch 4 |  iter 81 / 1327 | time 666[s] | perplexity 95.73\n",
      "| epoch 4 |  iter 101 / 1327 | time 670[s] | perplexity 86.94\n",
      "| epoch 4 |  iter 121 / 1327 | time 673[s] | perplexity 95.24\n",
      "| epoch 4 |  iter 141 / 1327 | time 676[s] | perplexity 104.59\n",
      "| epoch 4 |  iter 161 / 1327 | time 680[s] | perplexity 118.63\n",
      "| epoch 4 |  iter 181 / 1327 | time 683[s] | perplexity 129.49\n",
      "| epoch 4 |  iter 201 / 1327 | time 686[s] | perplexity 120.22\n",
      "| epoch 4 |  iter 221 / 1327 | time 690[s] | perplexity 121.18\n",
      "| epoch 4 |  iter 241 / 1327 | time 693[s] | perplexity 113.42\n",
      "| epoch 4 |  iter 261 / 1327 | time 696[s] | perplexity 113.67\n",
      "| epoch 4 |  iter 281 / 1327 | time 699[s] | perplexity 121.89\n",
      "| epoch 4 |  iter 301 / 1327 | time 703[s] | perplexity 104.52\n",
      "| epoch 4 |  iter 321 / 1327 | time 706[s] | perplexity 83.72\n",
      "| epoch 4 |  iter 341 / 1327 | time 709[s] | perplexity 99.09\n",
      "| epoch 4 |  iter 361 / 1327 | time 713[s] | perplexity 127.94\n",
      "| epoch 4 |  iter 381 / 1327 | time 716[s] | perplexity 98.07\n",
      "| epoch 4 |  iter 401 / 1327 | time 719[s] | perplexity 110.10\n",
      "| epoch 4 |  iter 421 / 1327 | time 722[s] | perplexity 94.15\n",
      "| epoch 4 |  iter 441 / 1327 | time 726[s] | perplexity 103.71\n",
      "| epoch 4 |  iter 461 / 1327 | time 729[s] | perplexity 100.42\n",
      "| epoch 4 |  iter 481 / 1327 | time 732[s] | perplexity 103.15\n",
      "| epoch 4 |  iter 501 / 1327 | time 736[s] | perplexity 108.56\n",
      "| epoch 4 |  iter 521 / 1327 | time 739[s] | perplexity 115.18\n",
      "| epoch 4 |  iter 541 / 1327 | time 742[s] | perplexity 112.92\n",
      "| epoch 4 |  iter 561 / 1327 | time 746[s] | perplexity 101.66\n",
      "| epoch 4 |  iter 581 / 1327 | time 749[s] | perplexity 89.43\n",
      "| epoch 4 |  iter 601 / 1327 | time 752[s] | perplexity 128.13\n",
      "| epoch 4 |  iter 621 / 1327 | time 755[s] | perplexity 121.39\n",
      "| epoch 4 |  iter 641 / 1327 | time 759[s] | perplexity 109.23\n",
      "| epoch 4 |  iter 661 / 1327 | time 762[s] | perplexity 103.28\n",
      "| epoch 4 |  iter 681 / 1327 | time 765[s] | perplexity 83.83\n",
      "| epoch 4 |  iter 701 / 1327 | time 769[s] | perplexity 102.25\n",
      "| epoch 4 |  iter 721 / 1327 | time 772[s] | perplexity 108.57\n",
      "| epoch 4 |  iter 741 / 1327 | time 775[s] | perplexity 95.21\n",
      "| epoch 4 |  iter 761 / 1327 | time 778[s] | perplexity 87.99\n",
      "| epoch 4 |  iter 781 / 1327 | time 782[s] | perplexity 87.74\n",
      "| epoch 4 |  iter 801 / 1327 | time 785[s] | perplexity 99.84\n",
      "| epoch 4 |  iter 821 / 1327 | time 788[s] | perplexity 102.77\n",
      "| epoch 4 |  iter 841 / 1327 | time 792[s] | perplexity 99.21\n",
      "| epoch 4 |  iter 861 / 1327 | time 795[s] | perplexity 105.28\n",
      "| epoch 4 |  iter 881 / 1327 | time 798[s] | perplexity 91.33\n",
      "| epoch 4 |  iter 901 / 1327 | time 802[s] | perplexity 115.21\n",
      "| epoch 4 |  iter 921 / 1327 | time 805[s] | perplexity 101.78\n",
      "| epoch 4 |  iter 941 / 1327 | time 808[s] | perplexity 112.13\n",
      "| epoch 4 |  iter 961 / 1327 | time 811[s] | perplexity 111.81\n",
      "| epoch 4 |  iter 981 / 1327 | time 815[s] | perplexity 107.65\n",
      "| epoch 4 |  iter 1001 / 1327 | time 818[s] | perplexity 97.86\n",
      "| epoch 4 |  iter 1021 / 1327 | time 821[s] | perplexity 113.86\n",
      "| epoch 4 |  iter 1041 / 1327 | time 825[s] | perplexity 104.58\n",
      "| epoch 4 |  iter 1061 / 1327 | time 828[s] | perplexity 89.75\n",
      "| epoch 4 |  iter 1081 / 1327 | time 831[s] | perplexity 77.73\n",
      "| epoch 4 |  iter 1101 / 1327 | time 834[s] | perplexity 78.33\n",
      "| epoch 4 |  iter 1121 / 1327 | time 838[s] | perplexity 104.40\n",
      "| epoch 4 |  iter 1141 / 1327 | time 841[s] | perplexity 99.69\n",
      "| epoch 4 |  iter 1161 / 1327 | time 844[s] | perplexity 91.62\n",
      "| epoch 4 |  iter 1181 / 1327 | time 847[s] | perplexity 96.79\n",
      "| epoch 4 |  iter 1201 / 1327 | time 851[s] | perplexity 83.20\n",
      "| epoch 4 |  iter 1221 / 1327 | time 854[s] | perplexity 75.52\n",
      "| epoch 4 |  iter 1241 / 1327 | time 857[s] | perplexity 91.40\n",
      "| epoch 4 |  iter 1261 / 1327 | time 861[s] | perplexity 94.21\n",
      "| epoch 4 |  iter 1281 / 1327 | time 864[s] | perplexity 88.70\n",
      "| epoch 4 |  iter 1301 / 1327 | time 867[s] | perplexity 109.41\n",
      "| epoch 4 |  iter 1321 / 1327 | time 871[s] | perplexity 109.46\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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WVlYs2aNcltjYyM2b96MoqKigMfu3r0bEyZM6PL7IyIRww4RdaigoABffvklTpw4gZqaGgDAfffdh40bN2LJkiXYsWMHDh48iA8++KBdg3CwYcOGoaysDG+99RYOHz6MZ599Fu+991671ystLcWOHTtQU1MDp9PZ7nkWLlwIs9mMRYsWYffu3Vi7di1uv/12XHfddcoSVmdWrVqFZ599Fjt27MCxY8fw97//HT6fL2xYSk9Px8SJE/H1118H3H7rrbciNzcXy5Ytw9NPPw2v14t77rlHuf/3v/89HnzwQfztb39DQUEB7HY77HY7mpubAYjVprvuuguPP/44/vOf/6CkpATXX389cnJycOWVVyrP09raiq1bt2LWrFlden9EpBLppiEi6luCG5SLi4uFcePGCSaTKWDr+ZYtW4TLLrtMiI+PF+Li4oRx48YJv/3tb5X7QzU2C4Ig3HvvvUJqaqoQHx8vXHvttcIzzzwjJCYmKvc7HA5h/vz5QlJSUq9sPVe78847hYsuukgQBLGh+qKLLhKSk5MFi8UijBs3Tnj77bc7/Gyef/55YerUqcrXr732mhAXFyccOHBAuW3z5s2CwWAQPv74Y+VzQNB2egDCQw89pHyPz+cTHnzwQSEzM1MwmUzCjBkzhP379we89htvvCGMGDGiw+sjotA0giAIkYtaRETRo62tDSNGjMDbb7/dbonpTJs6dSruuOMO/PjHPz6rr0sUC7iMRUTURRaLBX//+9+V5byzpaamBldffTUWLFhwVl+XKFawskNEREQxjZUdIiIiimkMO0RERBTTGHaIiIgopjHsEBERUUxj2CEiIqKYxrBDREREMY1hh4iIiGIaww4RERHFNIYdIiIiimn/H+n0GQQ+1AZdAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ❶ 应用梯度裁剪进行学习\n",
    "trainer.fit(xs, ts, max_epoch, batch_size, time_size, max_grad, eval_interval=20)\n",
    "trainer.plot(ylim=(0, 500))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:54:48.415412100Z",
     "start_time": "2023-05-09T09:40:16.160668Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "evaluating perplexity ...\n",
      "234 / 235\n",
      "test perplexity:  135.53508866518175\n"
     ]
    }
   ],
   "source": [
    "# ❷ 基于测试数据进行评价\n",
    "model.reset_state()\n",
    "ppl_test = eval_perplexity(model, corpus_test)\n",
    "print('test perplexity: ', ppl_test)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:56:08.557158200Z",
     "start_time": "2023-05-09T09:55:53.056159500Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [],
   "source": [
    "# ❸ 保存参数\n",
    "model.save_params()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T09:56:11.746853900Z",
     "start_time": "2023-05-09T09:56:11.734855300Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-05-09T10:20:08.660698800Z",
     "start_time": "2023-05-09T10:20:08.641700400Z"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
